package com.company.pangu.aliyun.risk.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * <p>阿里云文本检测</p >
 * https://help.aliyun.com/document_detail/70439.html?spm=a2c4g.11186623.6.701.5ebf4cactYviuu
 *
 * @author Nikola Tesla
 * @version 1.0
 * @date 2021/4/6
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RiskTextScanResponse {

    /**
     * 错误码，和HTTP状态码一致。
     */
    private int code;

    /**
     * 请求信息的响应信息。
     */
    private String msg;

    private String requestId;

    private List<TaskRes> data;


    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static final class TaskRes {

        private int code;

        private String msg;

        /**
         * 检测任务的ID。
         */
        private String taskId;

        /**
         * 被检测文本，和调用请求中的待检测文本对应。
         */
        private String content;

        /**
         * 返回结果。调用成功时（code=200），返回结果中包含一个或多个元素。
         */
        private List<Result> results;

        @Data
        @Builder
        @NoArgsConstructor
        @AllArgsConstructor
        public static final class Result {

            /**
             * 文本垃圾检测结果的分类。取值：
             * normal：正常文本
             * spam：含垃圾信息
             * ad：广告
             * politics：涉政
             * terrorism：暴恐
             * abuse：辱骂
             * porn：色情
             * flood：灌水
             * contraband：违禁
             * meaningless：无意义
             * customized：自定义（例如命中自定义关键词）
             */
            private String label;

            /**
             * 置信度分数，取值范围：0（表示置信度最低）~100（表示置信度最高）。
             * 如果suggestion为pass，则置信度越高，表示内容正常的可能性越高；如果suggestion为review或block，则置信度越高，表示内容违规的可能性越高。
             */
            private double rate;

            /**
             * 检测场景，和调用请求中的场景对应。
             */
            private String scene;

            /**
             * 建议您执行的后续操作。取值：
             * pass：结果正常，无需进行其余操作。
             * review：结果不确定，需要进行人工审核。
             * block：结果违规，建议直接删除或者限制公开。
             */
            private String suggestion;

            /**
             * 命中风险的详细信息，一条文本可能命中多条风险详情。具体结构描述
             */
            private List<Detail> details;

            @Data
            @Builder
            @NoArgsConstructor
            @AllArgsConstructor
            public static final class Detail {

                /**
                 * 文本命中风险的分类。取值：
                 * spam：含垃圾信息
                 * ad：广告
                 * politics：涉政
                 * terrorism：暴恐
                 * abuse：辱骂
                 * porn：色情
                 * flood：灌水
                 * contraband：违禁
                 * meaningless：无意义
                 * customized：自定义（例如命中自定义关键词）
                 */
                private String label;

            }

        }
    }

}
